#ifndef STR_UTIL_H
#define STR_UTIL_H

/**
 * 类似 printf() 的通用函数
 * 使用示例：
char *url = build_string("https://%s:%d/api?value=%.2f&name=%s",
                            "example.com", 8080, 3.14159, "test");
if (url) {
    printf("%s\n", url);
    lv_label_set_text(label, url);
    free(url);//✅返回的 char* 是堆内存，调用者必须在使用完后调用free释放堆内存，❌否则每次调用都会泄漏内存
}
 *
 * @param format 任意格式字符串
 * @param ... 可变参数 ...，接收任意数量的参数
 * @return char * 字符数组
 */
char * build_string(const char *format, ...);

/**
 * 判断字符数组是否为空
 * @param str 字符数组
 * @return bool 字符数组是否为空
 */
_Bool is_empty_str(const char *str);

/**
 * 判断是否为Windows系统
 * @param void
 * @return bool 是否为Windows系统
 */
_Bool is_windows_sys();


/**
 * str1尾部附加str2组成新的字符数组
 *
 * char *new_str = plus_str(str1, str2);
 * ✅返回的 char* 是堆内存，调用者必须在使用完后调用free释放堆内存，❌否则每次调用都会泄漏内存
    lv_label_set_text(label, new_str);
    free(new_str); // 必须 free

 * @param str1 字符数组1
 * @param str2 附加到str1尾部的字符数组2
 * @return char * 字符数组
 */
char *plus_str(const char *str1, const char *str2);

/**
 * str1尾部附加str2组成新的字符数组
 * char *new_str = merge_str(str1, str2);
 * @param str1 字符数组1
 * @param str2 附加到str1尾部的字符数组2
 * @return char * 字符数组
 */
//❌Windows不支持，注释掉，改用plus_str
// char merge_str(const char *str1, const char *str2);

#endif
